export default {
	// 为当前模块开启命名空间
	namespaced: true,
	// 模块的 state 数据
	state: () => ({
		// 购物车数组，用来存储购物车中每个商品的信息
		// 初始化的时候，要先从本地取一下
		cart: JSON.parse(uni.getStorageSync('cart') || '[]')
	}),
	// 这里和上面等价
	// state: () => {
	// 	return {
	// 	}
	// }
	// 模块的 mutations 方法
	mutations: {
		// 定义修改数据的方法
		addToCart(state, goods) {
			console.log('准备修改数据', goods)
			// 判断一下之前的商品是否添加过
			// 根据提交的商品的Id，查询购物车中是否存在这件商品
			// 如果不存在，则 findResult 为 undefined；否则，为查找到的商品信息对象
			const result = state.cart.find((x) => x.goods_id === goods.goods_id)
			if (!result) {
				// 如果购物车中没有这件商品，则直接 push
				state.cart.push(goods)
				// 如果要添加到首部使用下面的方法
				// state.cart.unshift(goods)
			} else {
				// 如果购物车中有这件商品，则只更新数量即可
				result.goods_count += 1
			}

			// 将购物车中的数据持久化存储到本地
			this.commit('m_cart/saveToStorage')

			console.log('修改后的state数据', JSON.stringify(state.cart))
		},

		// 更新购物车状态
		updateGoodsState(state, goods) {
			const result = state.cart.find((item) => item.goods_id === goods.goods_id)
			// 找到了，就更新
			if (result) {
				result.goods_state = goods.goods_state
				// 将购物车中的数据持久化存储到本地
				this.commit('m_cart/saveToStorage')
			}
		},

		// 更新购物车产品数量
		updateGoodsCount(state, goods) {
			const result = state.cart.find((item) => item.goods_id === goods.goods_id)
			// 找到了，就更新
			if (result) {
				result.goods_count = goods.goods_count
				// 将购物车中的数据持久化存储到本地
				this.commit('m_cart/saveToStorage')
			}
		},

		// 修改购物车中所有商品的状态
		updateAllGoodsState(state, newState) {
			// 遍历所有商品，将状态改为传递进来的状态
			state.cart.forEach(item => item.goods_state = newState)

			// 将购物车中的数据持久化存储到本地
			this.commit('m_cart/saveToStorage')
		},


		// 将购物车中的数据持久化存储到本地
		saveToStorage(state) {
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		}
	},
	// 模块的 getters 属性
	getters: {
		// 基于当前模块内的数据，计算出一些页面上其他逻辑需要的数据
		total(state) {
			// 基于state计算 [{goods_count: 1},{goods_count: 2}, {goods_count: 3},] 累加
			// let acc = 0
			// for (let i = 0; i < state.cart.length; i++) {
			// 	acc = acc + state.cart[i].goods_count
			// }
			// return acc

			// 基于state计算 [{goods_count: 1},{goods_count: 2}, {goods_count: 3},] 累加
			// let acc = 0
			// state.cart.forEach(item => {
			// 	acc = acc + item.goods_count
			// })
			// return acc

			// 数组里有个 reduce 方法
			// [{goods_count: 1},{goods_count: 2}, {goods_count: 3}]，一个一个拿出来处理，处理一个少一个
			// let result = state.cart.reduce((acc, curr) => {
			// 	return acc = acc + curr.goods_count
			// }, 0)
			// return result

			// let result = state.cart.reduce((acc, curr) => acc = acc + curr.goods_count, 0)
			// return result


			return state.cart.reduce((acc, curr) => acc = acc + curr.goods_count, 0)
		},
		// 所有商品是否都选中
		isAllCheck(state) {
			return state.cart.every(goods => goods.goods_state)
		},
		// 计算所有选中商品的总价格
		checkedGoodsAmount(state) {
			// 1 把所有选中商品筛选出来
			return state.cart.filter(item => item.goods_state)
				.reduce((acc, curr) => acc = acc + curr.goods_count * curr.goods_price, 0)
				.toFixed(2)
		},

		// 计算所有已经勾选商品的总数量
		checkedCount(state) {
			return state.cart.filter(item => item.goods_state)
				.reduce((acc, curr) => acc = acc + curr.goods_count, 0)
		}

	},

}
